package com.lijie.ljblog.common;

import java.util.concurrent.*;

/**
 * @Description
 * @Author lijie
 * @Date 2022/12/21 9:44
 **/
public class MyThreadPoolDemo {
    public static void main(String[] args) {

            //自定义线程池，此处使用的是定义了7个参数
            ExecutorService threadPool = new ThreadPoolExecutor(  2,
                    5,
                    1L,
                    TimeUnit.SECONDS,
                    new LinkedBlockingQueue<>(3),
                    Executors.defaultThreadFactory(),
                    new ThreadPoolExecutor.AbortPolicy());

            try{

                //模拟10个用户来办理业务，每个用户就是一个来自外部的请求线程
                //此处设置的拒绝策略为AbortPolicy(),当处理线程都还没处理完第一轮所有请求的情况下，10个请求线程超过了最大线程数加阻塞队列最大值数
                //无法处理多出的请求，就会启动拒绝策略，这里会抛出异常
                for(int i=1;i<=10;i++){
                    threadPool.execute(()->{
                        System.out.println(Thread.currentThread().getName()+"\t 办理业务");
                    });
                }

            }catch(Exception e){
                e.printStackTrace();
            }finally{
                threadPool.shutdown();//关闭池子
            }

        }

    }

